#define DEBUG
#include <cstdio>
#include <cstring>

using namespace std;

const int maxr=20, maxq=5;

int min(int a, int b) {
  return a<b ? a : b;
}

int max(int a, int b) {
  return a>b ? a : b;
}

long double solve(long double p, int n, int r, int q) {
  static long double f[2][maxr+1][maxq+1];
  memset(f, 128, sizeof(f));
  f[0][0][q] = 0;
  long double ans=0;
  for (int i=0; i<n; i++) {
    int nt=(i+1)%2, t=i%2;
    if (f[t][0][0]>=0) {
      ans += f[t][0][0];
    }
    for (int j=0; j<=r; j++) {
      int mj=min(j+1, r);
      for (int k=1; k<=q; k++) {
	if (f[t][j][k]>=0) {
	  int mk=min(k+1, q);
	  if (f[nt][mj][mk]<0) {
	    f[nt][mj][mk] = 0;
	  }
	  f[nt][mj][mk] += (f[t][j][k]+min(j+1, r))*p;
	  if (f[nt][0][k-1]<0) {
	    f[nt][0][k-1] = 0;
	  }
	  f[nt][0][k-1] += f[t][j][k]*(1-p);
	}
      }
    }
  }

  for (int i=0; i<=r; i++) {
    for (int j=0; j<=q; j++) {
      if (f[n%2][i][j]>0) {
	ans += f[n%2][i][j];
      }
    }
  }
  return ans;
}

int main() {
#ifdef DEBUG
  freopen("1.in", "r", stdin);
  freopen("1.out", "w", stdout);
#endif

  int n, r, q, s;
  scanf("%d %d %d %d", &n, &r, &q, &s);

  long double ans=-1;
  const long double eps=1.e-6;
  for (long double l=0, r=1, mid; l<=r; ) {
    mid = (l+r)/2;
    if (solve(mid, n, r, q)>s) {
      ans = mid;
      r = mid-eps;
    } else {
      l = mid+eps;
    }
  }
  if (ans<0) {
    printf("Impossible.");
  } else {
    printf("%.6LF", ans);
  }

  fclose(stdin);
  fclose(stdout);
  return 0;
}
